package com.sixth.system.service.impl;/**
 * @author 633yh
 * @version 1.0
 */

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sixth.core.entity.Dept;
import com.sixth.core.vo.R;
import com.sixth.system.mapper.DeptMapper;
import com.sixth.system.service.DeptService;
import com.sixth.system.vo.DeptVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author     ：Stu YH
 * @date       ：Created in 2024/8/14 15:48
 * @description：
 * @modified By：
 * @version:
 */
@Service
public class DeptServiceImpl implements DeptService {
    @Autowired
    private DeptMapper deptMapper;
    @Override
    public R<List<Dept>> selectAll() {
        //条件查询类
        QueryWrapper<Dept> wrapper=new QueryWrapper<>();
        wrapper.eq("status",0);
        wrapper.eq("del_flag",0);
        List<Dept> depts = deptMapper.selectList(wrapper);
        return R.ok(depts);
    }

    @Override
    public R<IPage<Dept>> selectPage(DeptVo deptVo) {
        IPage<Dept> page = new Page<>(deptVo.getPageNum(), deptVo.getPageSize());
        QueryWrapper<Dept> wrapper=new QueryWrapper<>();
        if (deptVo.getDeptName()!=null){
            wrapper.eq("dept_name",deptVo.getDeptName());
        }
        if (deptVo.getStatus()!=null){
            wrapper.eq("status",deptVo.getStatus());
        }
        wrapper.eq("del_flag",0);
        if(deptVo.getDateRange()!=null&&deptVo.getDateRange().size()==2){
            wrapper.between("create_time",deptVo.getDateRange().get(0),deptVo.getDateRange().get(1));
        }
        wrapper.eq("del_flag",0);
        wrapper.orderByAsc("order_num");
        IPage<Dept> deptIPage = deptMapper.selectPage(page, wrapper);
        return R.ok(deptIPage);
    }

    @Override
    public R<Dept> getById(Integer deptId) {
        return R.ok(deptMapper.selectById(deptId));
    }

    @Override
    public R removeById(Integer deptId) {
        Dept dept = new Dept();
        dept.setDeptId(Long.valueOf(deptId));
        dept.setDelFlag("1");
        return R.ok(deptMapper.updateById(dept));
    }

    @Override
    public R batchDelete(Long[] deptIds) {
        // 将用户ID数组转换为User对象列表，设置删除标记
        List<Dept> collect = Arrays.stream(deptIds).map(item -> {
            Dept dept = new Dept();
            dept.setDeptId(item);
            dept.setDelFlag("1");
            return dept;
        }).collect(Collectors.toList());
        // 更新用户状态为已删除
        deptMapper.updateById(collect);
        // 返回操作结果，表示删除成功
        return R.ok();
    }

/**
 * 添加或更新部门信息
 * <p>
 * 此方法用于添加新部门或更新现有部门的信息。如果部门已存在，则更新其信息；否则，将创建一个新的部门条目。
 * 方法会自动设置部门的创建时间为当前时间。
 *
 * @param dept 需要添加或更新的部门实体
 * @return 操作是否成功
 */
@Override
public boolean add_update(Dept dept) {
    // 使用LocalDateTime.now()获取当前的时间
    LocalDateTime localDateTime = LocalDateTime.now();

    // 设置部门的创建时间为当前时间
    dept.setCreateTime(new Date());
    // 调用mapper层的insertOrUpdate方法更新或插入部门信息
    // 返回是否成功执行
    return deptMapper.insertOrUpdate(dept);
}


}